package service_sys

import (
	"fmt"
	"strings"
	"wrblog-api-go/app/common/constants"
	"wrblog-api-go/app/dao/dao_sys"
	"wrblog-api-go/app/model"
	"wrblog-api-go/app/model/model_sys"
	"wrblog-api-go/pkg/mylog"
	"wrblog-api-go/pkg/redis"
	"wrblog-api-go/pkg/utils"
)

func init() {
	err := CacheConfigList()
	if err != nil {
		mylog.MyLog.Error(fmt.Sprintf("参数初始化失败%s", err))
	}
}

// CacheConfigList 缓存参数列表
func CacheConfigList() error {
	pageNum := 1
	pageSize := -1
	sysConfigs, _, err := GetSysConfigPageList(model_sys.SelectSysConfig{SelectBaseEntity: model.SelectBaseEntity{PageNum: &pageNum, PageSize: &pageSize}})
	if err != nil {
		return err
	}
	for _, sysConfig := range sysConfigs {
		err = redis.Set(constants.SYS_CONFIG+sysConfig.ConfigKey, sysConfig.ConfigValue)
		if err != nil {
			return err
		}
	}
	return nil
}

func GetSysConfigPageList(sysConfig model_sys.SelectSysConfig) ([]model_sys.SysConfigVo, int64, error) {
	return dao_sys.GetPageList(sysConfig)
}

func GetSysConfigById(configId int) (model_sys.SysConfigVo, error) {
	return dao_sys.GetSysConfigById(configId)
}

func AddSysConfig(sysConfig model_sys.SysConfigPo) (int, error) {
	sysConfig.CreateTime = utils.NewTimeNow()
	return dao_sys.AddSysConfig(sysConfig)
}
func EditSysConfig(sysConfig model_sys.SysConfigPo) (int64, error) {
	sysConfig.UpdateTime = utils.NewTimeNow()
	return dao_sys.EditSysConfig(sysConfig)
}

func RemoveSysConfig(configIds string, uk string) (int64, error) {
	return dao_sys.RemoveSysConfig(strings.Split(configIds, ","), uk)
}

func GetValueByKey(key string) (string, error) {
	val := redis.Get(constants.SYS_CONFIG + key)
	if utils.IsEmpty(val) {
		sysConfig, err := dao_sys.GetInfoByKey(key)
		if err != nil {
			return "", err
		}
		err = redis.Set(constants.SYS_CONFIG+sysConfig.ConfigKey, sysConfig.ConfigValue)
		if err != nil {
			return "", err
		}
		return sysConfig.ConfigValue, nil
	}
	return string(val), nil
}
